package com.example.myspringboot.config;

import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
/**
 * @author 陈宇
 * @date 2024/6/21
 * Redis操作类，提供对Redis基本操作的支持。
 * 使用Spring Boot的RedisTemplate和StringRedisTemplate来简化Redis的操作。
 */
@Component
@RequiredArgsConstructor
public class RedisOperate {

    private final StringRedisTemplate stringRedisTemplate;

    /**
     * 设置Redis中指定键的值。
     *
     * @param key 键名
     * @param value 键对应的值
     */
    public void setValue(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    /**
     * 获取Redis中指定键的值。
     *
     * @param key 键名
     * @return 键对应的值
     */
    public String getValue(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    /**
     * 在Redis的哈希表中设置指定字段的值。
     *
     * @param type 哈希表的名称
     * @param key 字段名
     * @param value 字段的值
     */
    public void setHashValue(String type, String key, String value) {
        stringRedisTemplate.opsForHash().put(type, key, value);
    }

    /**
     * 获取Redis哈希表中指定字段的值。
     *
     * @param type 哈希表的名称
     * @param key 字段名
     * @return 字段的值
     */
    public String getHashValue(String type, String key) {
        return String.valueOf(stringRedisTemplate.opsForHash().get(type, key));
    }

    public long getIncrement(String sequenceKey) {
        Long increment = stringRedisTemplate.opsForValue().increment(sequenceKey);
        return increment == null ? 0 : increment;
    }
}
